package com.shopping_back.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@ComponentScan
public class TokenUtil {
    @Value("${jwt.secret}")
    private String encryptKey;

    @Value("${jwt.expire-minutes:30}")
    private int expireTime;

    @Value("${jwt.issuer:zhangsan}")
    private String issuer;

    /**
     * 生成 token 要封装到 token 的内容，如果要传递多个参数内容，可以定义为 JSON 或者 Map
     * 返回 token
     */

    public String createToken(JSONObject jsonObject) {
        return JWT.create()
                .withSubject(jsonObject.toString())
                .withIssuer(issuer)
                .withExpiresAt(DateUtil.offsetMinute(new Date(), expireTime))
                .withClaim("test", "123")
                .sign(Algorithm.HMAC256(encryptKey)); // 使用配置的密钥
    }

    /**
     * 验证Token
     */
    public boolean verifyToken(String token) {
        try {
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(encryptKey))
                    .withIssuer(issuer)
                    .build();
            jwtVerifier.verify(token);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}
